From b5f8d383dcea70e72ba71bf6d5f4ca5fbb808978 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sat, 25 Jun 2011 23:40:40 -0400 Subject: [PATCH] Fix handling of pending signals in wait_reading_process_output (Bug#8869). MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * process.c (wait_reading_process_output): Bypass select if waiting for a cell while ignoring keyboard input, and input is pending. Suggested by Jan Djärv. --- src/ChangeLog | 8 +++++++- src/process.c | 12 +++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index f664f449d3b..681e6c598ff 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2011-06-26 Chong Yidong + + * process.c (wait_reading_process_output): Bypass select if + waiting for a cell while ignoring keyboard input, and input is + pending. Suggested by Jan Djärv (Bug#8869). + 2011-06-25 Paul Eggert Use gnulib's dup2 module instead of rolling our own. @@ -351,7 +357,7 @@ 2011-06-22 Jim Meyering - don't leak an XBM-image-sized buffer + Don't leak an XBM-image-sized buffer * image.c (xbm_load): Free the image buffer after using it. 2011-06-21 Paul Eggert diff --git a/src/process.c b/src/process.c index c46437fe8cb..0fe7068af3b 100644 --- a/src/process.c +++ b/src/process.c @@ -4479,13 +4479,19 @@ wait_reading_process_output (int time_limit, int microsecs, int read_kbd, set_waiting_for_input (&timeout); } + /* Skip the `select' call if input is available and we're + waiting for keyboard input or a cell change (which can be + triggered by processing X events). In the latter case, set + nfds to 1 to avoid breaking the loop. */ no_avail = 0; - if (read_kbd && detect_input_pending ()) + if ((read_kbd || !NILP (wait_for_cell)) + && detect_input_pending ()) { - nfds = 0; + nfds = read_kbd ? 0 : 1; no_avail = 1; } - else + + if (!no_avail) { #ifdef ADAPTIVE_READ_BUFFERING -- 2.30.2